%% -*- Erlang -*-

Definitions.

D = [0-9]
L = [A-Za-z]
WS  = ([\000-\s]|%.*)


Rules.

goto : {token, {'goto', TokenLine}}.

_    : {token, {'_', TokenLine}}.
&    : {token, {'&', TokenLine}}.

\(   : {token, {'(', TokenLine}}.
\)   : {token, {')', TokenLine}}.

\{   : {token, {'{', TokenLine}}.
\}   : {token, {'}', TokenLine}}.

\?   : {token, {'?', TokenLine}}.
%% label
:    : {token, {':', TokenLine}}. 

;    : {token, {';', TokenLine}}.
,    : {token, {',', TokenLine}}.    

{WS}+     : skip_token.
\/\*.*\*\/ : skip_token.
\/\/.*\n    : skip_token.

HERE       : {token, {'here', TokenLine}}. 
AHEAD      : {token, {'ahead', TokenLine}}.
LEFTAHEAD  : {token, {'left_ahead', TokenLine}}. 
RIGHTAHEAD : {token, {'right_ahead', TokenLine}}.

FOOD        : {token, {'food', TokenLine}}.
FOE         : {token, {'foe', TokenLine}}.
FRIENDWITHFOOD : {token, {'friend_with_food', TokenLine}}.
FOEWITHFOOD : {token, {'foe_with_food', TokenLine}}.

ROCK        : {token, {'rock', TokenLine}}.
FOEMARKER   : {token, {'foe_marker', TokenLine}}.

HOME        : {token, {'home', TokenLine}}.
FOEHOME     : {token, {'foe_home', TokenLine}}. 

sense : {token, {'sense', TokenLine}}.
pickup : {token, {'pickup', TokenLine}}.
move : {token, {'move', TokenLine}}.
flip : {token, {'flip', TokenLine}}.
turn : {token, {'turn', TokenLine}}.
drop : {token, {'drop', TokenLine}}.

{L}+      : {token, %??? list_to_atom(TokenChars)}.
	     {'string', TokenLine, list_to_atom(TokenChars)}}.

{D}+       : {token, {number, TokenLine, 
		      case to_integer(TokenChars) of {Int,_} ->Int end}}.


Erlang code.


%% {D}         : {token, {number, TokenLine, case TokenChars of
%% 					    "0" ->
%% 						0;
%% 					    "1" ->
%% 						1;
%% 					    "2" ->
%% 						2;
%% 					    "3" ->
%% 						3;
%% 					    "4" ->
%% 						4;
%% 					    "5" ->
%% 						5
%% 						end}}.
